/*
在二维空间中有许多球形的气球。对于每个气球，提供的输入是水平方向上，气球直径的开始和结束坐标。
由于它是水平的，所以纵坐标并不重要，因此只要知道开始和结束的横坐标就足够了。
开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。
在坐标 x 处射出一支箭，若有一个气球的直径的开始和结束坐标为 xstart，xend， 
且满足  xstart ≤ x ≤ xend，则该气球会被引爆。可以射出的弓箭的数量没有限制。
弓箭一旦被射出之后，可以无限地前进。我们想找到使得所有气球全部被引爆，所需的弓箭的最小数量。


输入：
4  
10 16
2 8
1 6
7 12

输出：2

解释：第1行4表示4个气球，接下来的每一行表示气球的直径的开始和结束坐标xstart，xend。
对于该样例，x = 6 可以射爆 [2,8],[1,6] 两个气球，以及 x = 11 射爆另外两个气球。
*/

#include <bits/stdc++.h>
using namespace std;
struct balloon
{
    int start;
    int end;
};
bool cmp(balloon b1,balloon b2)//按最右边从小到大排
{
    return b1.end < b2.end;
}

int main()
{
    int n; // n个气球
    cin >> n;
    balloon b[n];
    for (int i = 0; i < n; i++)
    {
        cin >> b[i].start >> b[i].end;
    }
    sort(b, b + n, cmp);
    int xend = b[0].end; //右侧最靠左的气球，作为目标气球
    int sum = 1;
    for (int i = 0; i < n;i++)
    {
        if(b[i].start > xend) //当前气球的左侧在目标气球的右侧
        {
            sum++; //射爆一组气球
            xend = b[i].end; //更新目标气球
        }
    }
    cout << sum;
    return 0;
}

/*
0:  **
1: ****
2；   ***
3：  *****
4： ********
5：      ****
...
*/